package com.funong.matrix.biz.user.facade;

import cn.hutool.core.lang.tree.Tree;
import com.funong.matrix.biz.user.pojo.dto.ResetPasswordDTO;
import com.funong.matrix.biz.user.pojo.dto.UserDTO;
import com.funong.matrix.biz.user.pojo.dto.UserLoginDTO;
import com.funong.matrix.biz.base.entity.SysUserEntity;
import com.funong.matrix.biz.user.pojo.dto.UserPermissionMenuDTO;
import com.funong.matrix.biz.user.pojo.vo.LoginVO;
import com.funong.matrix.core.dto.QueryDTO;
import com.funong.matrix.core.dto.Result;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @author wanjialin
 * @version 1.0
 * @date 2023/5/18
 */
public interface SysUserFacade {

    /**
     * 查询用户信息列表
     *
     * @param queryDTO
     * @return
     */
    Result queryUser(QueryDTO<UserDTO> queryDTO);


    /**
     * 根据id删除用户信息
     *
     * @param sysUserEntity
     * @return
     */
    Boolean saveUser(SysUserEntity sysUserEntity);

    /**
     * 根据id删除用户信息
     *
     * @param id
     * @return
     */
    Boolean deleteUser(Integer id);

    /**
     * 根据id查询用户信息
     *
     * @param id
     * @return
     */
    SysUserEntity queryUserById(Integer id);

    /**
     * 修改用户信息
     *
     * @param sysUserEntity
     * @return
     */
    Boolean updateUser(@RequestBody SysUserEntity sysUserEntity);

    /**
     * 修改用户密码
     *
     * @param resetPasswordDTO
     * @return
     */
    Boolean updatePassword(ResetPasswordDTO resetPasswordDTO);

    /**
     * 用户登录
     *
     * @param userLoginDTO
     * @return
     */
    LoginVO userLogin(UserLoginDTO userLoginDTO);

    /**
     * 根据用户账号查查询用户信息
     *
     * @param account
     * @return
     */
    SysUserEntity queryUserByAccount(String account);


    /**
     * 根据id启用/禁用用户
     *
     * @param id
     * @return
     */
    Boolean updateUserStatus(Integer id);


    /**
     * 根据用户id查询菜单权限
     *
     * @param id
     * @return
     */
    UserPermissionMenuDTO queryUserPremiseMenu(Integer id);

    /**
     * 下拉选择
     *
     * @return
     */
    List<Tree<Integer>> querySelect();
}
